////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modawbfaceassistv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODAWBFACEASSISTV1_H
#define MODAWBFACEASSISTV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "awbglobalelements.h"

#define MODAWBFACEASSISTV1_NAMESPACE_BEGIN namespace modawbfaceassistv1 {
#define MODAWBFACEASSISTV1_NAMESPACE_END }

MODAWBFACEASSISTV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// awbFaceSATriggerCtrlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class awbFaceSATriggerCtrlType
{
    FaceTriggerCtrlLuxIdx             = 0,
    FaceTriggerCtrlCCT                = 1,
    FaceTriggerCtrlValidStatsCntRatio = 2,
    FaceTriggerCtrlFaceStatsCntRatio  = 3,
    FaceTriggerCtrlLightSkinCCT       = 4,
    FaceTriggerCtrlDarkSkinCCT        = 5,
    FaceTriggerCtrlSkinTypeDistRatio  = 6,
    FaceTriggerCtrlAgwRg              = 7,
    FaceTriggerCtrlAgwBg              = 8,
    FaceTriggerCtrlFianlfaceCCT       = 9,
    FaceTriggerCtrlTypeMax            = 10
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1TargetDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1TargetDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerType - Array
    /// Length:        2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbFaceSATriggerCtrlType triggerType[2];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType         triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   triggerDataCount;
    UINT32                   triggerDataID;
    awbglobalelements::awbSATargetLevel2Type*   triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1ConfidenceDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1ConfidenceDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerType - Array
    /// Length:        2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbFaceSATriggerCtrlType   triggerType[2];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType           triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    ///
    /// Description:   1st triggering level
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                     triggerDataCount;
    UINT32                     triggerDataID;
    awbglobalelements::awbSAConfidenceLevel2Type* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1StatThresholdDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1StatThresholdDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ///
    /// Tuning Level:  never_tune
    /// Description:   Dummy data for consistent trigger data structure
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType       triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 triggerDataCount;
    UINT32                 triggerDataID;
    awbglobalelements::awbTriggerDataRGBType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1FaceDetectCtrlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1FaceDetectCtrlType
{
    INT32 detectCntThreshold;
    INT32 nonDetectCntThreshold;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1FaceROICtrlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1FaceROICtrlType
{
    FLOAT ROIXScale;
    FLOAT ROIYScale;
    FLOAT FaceSelectThreshold;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1CbCrDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1CbCrDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerType - Array
    /// Length:        2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbFaceSATriggerCtrlType triggerType[2];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType         triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   triggerDataCount;
    UINT32                   triggerDataID;
    awbglobalelements::awbCbCrLevel2Type*       triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modFaceAssistV1AWBGainLockCtrlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modFaceAssistV1AWBGainLockCtrlType
{
    INT32 AWBGainLockEnable;
    FLOAT RGainPctDev;
    FLOAT BGainPctDev;
    INT32 AWBGainStableCount;
    INT32 AWBGainLockCount;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAWBFaceAssistV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAWBFaceAssistV1Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType                         moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableFlag
    ///
    /// Tuning Level:  must_tune
    /// Description:   module enable flag
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::enableFlagType                       enableFlag;
    FLOAT                                faceAssistSAWeight;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FaceROICtrl
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1FaceROICtrlType       FaceROICtrl;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// faceDetectCtrl
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1FaceDetectCtrlType    faceDetectCtrl;
    FLOAT                                ConvSpeed;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// darkThresholdData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1StatThresholdDataType darkThresholdData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SatThresholdData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1StatThresholdDataType SatThresholdData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// confidenceLevel - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                               confidenceLevelCount;
    UINT32                               confidenceLevelID;
    modFaceAssistV1ConfidenceDataType*   confidenceLevel;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// darkSkinTargetPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1TargetDataType        darkSkinTargetPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// lightSkinTargetPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1TargetDataType        lightSkinTargetPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// skinTypeInterpWeight - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                               skinTypeInterpWeightCount;
    UINT32                               skinTypeInterpWeightID;
    modFaceAssistV1ConfidenceDataType*   skinTypeInterpWeight;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// AWBGainLockCtrl
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1AWBGainLockCtrlType   AWBGainLockCtrl;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CbCrHighThreshold
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1CbCrDataType          CbCrHighThreshold;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CbCrLowThreshold
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modFaceAssistV1CbCrDataType          CbCrLowThreshold;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAWBFaceAssistV1TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixAWBFaceAssistV1TypeClass : public ParameterModule, public chromatixAWBFaceAssistV1Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAWBFaceAssistV1TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAWBFaceAssistV1TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixAWBFaceAssistV1TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1TargetDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1TargetDataType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1TargetDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1ConfidenceDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1ConfidenceDataType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1ConfidenceDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1StatThresholdDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1StatThresholdDataType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1StatThresholdDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1FaceDetectCtrlType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1FaceDetectCtrlType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1FaceDetectCtrlType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1FaceROICtrlType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1FaceROICtrlType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1FaceROICtrlType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1CbCrDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1CbCrDataType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1CbCrDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modFaceAssistV1AWBGainLockCtrlType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodFaceAssistV1AWBGainLockCtrlType(
        ParameterFileSymbolTableEntry* entry,
        modFaceAssistV1AWBGainLockCtrlType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAWBFaceAssistV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAWBFaceAssistV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixAWBFaceAssistV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixAWBFaceAssistV1Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFaceAssistV1TargetDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFaceAssistV1TargetDataType(
        modFaceAssistV1TargetDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFaceAssistV1ConfidenceDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFaceAssistV1ConfidenceDataType(
        modFaceAssistV1ConfidenceDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFaceAssistV1StatThresholdDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFaceAssistV1StatThresholdDataType(
        modFaceAssistV1StatThresholdDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modFaceAssistV1CbCrDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodFaceAssistV1CbCrDataType(
        modFaceAssistV1CbCrDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixAWBFaceAssistV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixAWBFaceAssistV1Type(
        chromatixAWBFaceAssistV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixAWBFaceAssistV1TypeClass

MODAWBFACEASSISTV1_NAMESPACE_END
#endif // MODAWBFACEASSISTV1_H

